pub fn dp_rec_mc(amount: u32) -> u32 {
    // 定义硬币面值数组，可以根据需要调整
    let coins = [1, 5, 10, 25];

    // 初始化 dp 数组，设置每个位置为一个较大的值（如 amount + 1），表示初始状态
    let mut dp = vec![amount + 1; (amount + 1) as usize];

    // 凑成金额 0 所需硬币数量为 0
    dp[0] = 0;

    // 从 1 到 amount，依次计算所需的最少硬币数
    for i in 1..=amount as usize {
        for &coin in coins.iter() {
            if i as u32 >= coin {
                dp[i] = dp[i].min(dp[i - coin as usize] + 1);
            }
        }
    }

    // 如果 dp[amount] 没有更新过，说明无法凑出该金额，返回 0，否则返回 dp[amount]
    if dp[amount as usize] > amount {
        0
    } else {
        dp[amount as usize]
    }
}
